Плохо! Плохо!:  0
Показано с 1 по 2 из 2

Тема: [MZ ~ MV] DKR_EntityCustomData

  1. #1
    Бывалый Аватар для Darchan Kaen
    Информация о пользователе
    Регистрация
    17.06.2013
    Адрес
    Одесса
    Сообщений
    851
    Записей в дневнике
    3
    Репутация: 47 Добавить или отнять репутацию

    По умолчанию [MZ ~ MV] DKR_EntityCustomData

    Название плагина: DKR_EntityCustomData

    Автор: DarchanKaen

    Версия: 1.0

    Дата выхода:
    Версия 1.0 - 15.01.2022

    Описание плагина:
    Плагин позволяет хранить данные (например, состояние) игрового объекта, привязанные к Эвенту или Картинке.
    Также можно искать необходимый объект данных и сохранять в переменной.
    Может быть полезен для мини-игр, пазлов, боёвок.

    Для полноценного использования нужно самое базовое знание JavaScript (создание и исп-е массивов и объектов)!

    Например, мы можем хранить/обновлять/получать/удалять кол-во "ХП" у врага-эвента.(!)

    Нюансы:
    0. Плагин тестировался на MZ, но на MV используемый мейкерской код аналогичен...должно работать. =)
    1. При удалении Эвентов или Картинок из игры (средствами мейкера или скриптами-плагинами), их объекты данных автоматом не удаляются и их нужно
    удалить командой скрипта DKR.EntityCustomData.deleteCustomData(deleteCriter ia); !
    2. Хранить можно любой тип данных (строка, число, массив, объект). Кол-во хранимых данных не ограничено.
    3. Списки (массивы) данных хранятся в 2-х переменных (для корректной работы при Сохранении/Загрузке игры).

    Использование плагина(одинаково и для MV , и для MZ):
    Параметры плагина
    Номера переменных, в которых будут храниться списки с данными для Эвентов и Картинок, а также номер переменной для опционально вывода туда
    объекта данных.

    Команды (в эвенте, в команде "Скрипт")
    DKR.EntityCustomData.createCustomData(createCriter ia); - создать объект данных по указанным критериям.
    DKR.EntityCustomData.updateCustomData(updateCriter ia); - обновить объект данных по указанным критериям.
    DKR.EntityCustomData.getCustomData(searchCriteria, isWriteToVar); - получить объект данных по указанным критериям.
    DKR.EntityCustomData.deleteCustomData(deleteCriter ia); - удалить объект данных по указанным критериям.
    где
    createCriteria, updateCriteria, searchCriteria, deleteCriteria - критерии создания / обновления / поиска / удаления объектов данных.
    isWriteToVar - true (записывать) или false (не записывать) найденный по критериям поиска объект данных в переменную.

    Спойлер Описание "критериев" (важно!):

    createCriteria = {
    entityType: 'event-type',
    searchType: 'search-type',
    searchParams: [search-params],
    customData: [ [name, value], ...., [nameN, valueN]]
    }
    updateCustomData = {
    entityType: 'event-type',
    searchType: 'search-type',
    searchParams: [search-params],
    updateType: 'update-type',
    customData: [ [name, value], ...., [nameN, valueN]]
    }
    searchCriteria = {
    entityType: 'event-type',
    searchType: 'search-type',
    searchParams: [search-params],
    }
    deleteCriteria = {
    entityType: 'event-type',
    searchType: 'search-type',
    searchParams: [search-params],
    }
    где
    'event-type' - может быть или 'event' (для Эвента) или 'pic' для (Картинки).
    'search-type' - можеть быть или 'id' (поиск по Id Эвента или номенку Картинки) или 'coords' (поиск по координатам).
    [search-params] - [Id Эвента ЛИБО номер Картинки] или [коордиана X, координата Y].
    'update-type' - может быть или 'rew' (для перезаписи данных) или 'del' (для удаления данных; сам объект данных остается).
    [ [name, value], ...., [nameN, valueN]] - список данных в формате ['Ключ', значение] (например: [ ['ХП', 1325], ['Манна', 101]] )


    Код:
    Спойлер Версия 1.0, для MV и MZ:

    Код:
    //-----------------------------------------------------------------------------
    //  DKR EntityCustomData
    //-----------------------------------------------------------------------------
    //  For: RPGMAKER MV, MZ
    //  DKR_EntityCustomData.js
    //-----------------------------------------------------------------------------
    //  15.01.2022 - Версия 1.0.0
    //-----------------------------------------------------------------------------
    // Поставляется AS-IS.
    // Вся ответственность при использовании - на Пользователе!
    //-----------------------------------------------------------------------------
    
    var Imported = Imported || {};
    Imported.DKR_EntityCustomData = true;
    
    var DKR = DKR || {};          
    DKR.EntityCustomData = DKR.EntityCustomData  || {}; 
    DKR.EntityCustomData.version = 1.0;
    
    //-----------------------------------------------------------------------------
    /*:
     * @plugindesc (v.1.0.0) Плагин позволяет хранить данные игрового объекта, привязанные к Эвенту или Картинке. Может быть полезен для мини-игр, пазлов, боёвок.
     * 
     * @target MV, MZ
     * @author DarchanKaen
     *
     * @help
     *   EntityCustomData
     * ----------------------------------------------------------------------------
     * ---Общая информация:
     * Плагин позволяет хранить данные (например, состояние) игрового объекта, привязанные к Эвенту или Картинке.
     * Также пожно искать необходимый объект данных и сохранять в переменной.
     * Может быть полезен для мини-игр, пазлов, боёвок. 
     * Для полноценного использования нужно самое базовое знание JavaScript (создание и исп-е массивов и объектов)!
     *
     * Хранить можно любой тип данных (строка, число, массив, объект).
     * Кол-во хранимых данных не ограничено.
     * Списки (массивы) данных хранятся в 2-х переменных (для корректной работы при Сохранении/Загрузке игры). 
     *
     * Например, мы можем хранить/обновлять/получать/удалять кол-во "ХП" у врага-эвента.
     *
     * При удалении Эвентов или Картинок из игры средствами мейкера, их объекты данных автоматом не удаляются!
     * Удалить их нужно командой DKR.EntityCustomData.deleteCustomData(deleteCriteria); !!!
     *
     * ---Команды(в эвенте команда "Скрипт"):
     * DKR.EntityCustomData.createCustomData(createCriteria); - создать объект данных.
     * DKR.EntityCustomData.updateCustomData(updateCriteria);  - обновить объект данных.
     * DKR.EntityCustomData.getCustomData(searchCriteria, isWriteToVar);  - получить объект данных.
     * DKR.EntityCustomData.deleteCustomData(deleteCriteria);  - удалить объект данных.
     * где 
     * createCriteria, updateCriteria, searchCriteria, deleteCriteria - критерии создания / обновления / поиска / удаления объектов данных.
     * isWriteToVar - true (записывать) или false (не записывать) найденный по критериям поиска объект данных в переменную. 
     *
     * ОПИСАНИЕ "критериев"!!!
     *
     createCriteria = {
    	entityType: 'event-type',
    	searchType: 'search-type',
    	searchParams: [search-params],
    	customData: [ [name, value], ...., [nameN, valueN]]
     }
     updateCustomData = {
    	entityType: 'event-type',
    	searchType: 'search-type',
    	searchParams: [search-params],
    	updateType: 'update-type',
    	customData: [ [name, value], ...., [nameN, valueN]]
     }
     searchCriteria = {
    	entityType: 'event-type',
    	searchType: 'search-type',
    	searchParams: [search-params],
     }
     deleteCriteria = {
    	entityType: 'event-type',
    	searchType: 'search-type',
    	searchParams: [search-params],
     }
     * где 
     * 'event-type' - может быть или 'event' (для Эвента) или 'pic' для (Картинки).
     * 'search-type' - можеть быть или 'id' (поиск по Id Эвента или номенку Картинки) или 'coords' (поиск по координатам).
     * [search-params] - [Id Эвента ЛИБО номер Картинки] или [коордиана X, координата Y].
     * 'update-type' - может быть или 'rew' (для перезаписи данных) или 'del' (для удаления данных; сам объект данных остается).
     * [ [name, value], ...., [nameN, valueN]] - список данных в формате ['Ключ', значение] (например: [ ['ХП', 1325], ['Манна', 101]] )
     *
     * ----------------------------------------------------------------------------
     *
     * @param eventsCustomDataVarId
     * @type variable
     * @desc Номер переменной для сохранения Списка данных Эвентов.
     * @default 71
     *
     * @param picsCustomDataVarId
     * @type variable
     * @desc Номер переменной для сохранения Списка данных Картинок.
     * @default 72
      *
     * @param writeCustomDataVarId
     * @type variable
     * @desc Номер переменной для сохранения объекта данных по критериям поиска.
     * @default 73
     *
     */
    	//----INFO
    		/*
    		--createCriteria
    		{
    			entityType: 'event' OR 'pic'
    			searchType: 'id' OR 'coords'
    			searchParams: [] //id ([1]) OR coords [200, 300]
    			customData: [ [name, value],....,[nameN,valueN] ] (['hp', 99])
    		}
    		*/
    		/*
    		--searchCriteria OR deleteCriteria
    		{
    			entityType: 'event' OR 'pic'
    			searchType: 'id' OR 'coords'
    			searchParams: [] //id ([1]) OR coords [200, 300]
    		}
    		--updateCriteria
    		{
    			entityType: 'event' OR 'pic'
    			searchType: 'id' OR 'coords'
    			updateType: 'rew' OR 'del'
    			customData: [ [name, value],....,[nameN,valueN] ] (['hp', 99])
    		}
    		*/
    
    
    
    ( () => {
    	
    
    	
    	//----DATA
    	DKR.EntityCustomData.parameters = PluginManager.parameters('DKR_EntityCustomData');
    	let eventsCustomDataVarId = Number(DKR.EntityCustomData.parameters["eventsCustomDataVarId"]) || 71;
    	let picsCustomDataVarId = Number(DKR.EntityCustomData.parameters["picsCustomDataVarId"]) || 72;
    	let writeCustomDataVarId = Number(DKR.EntityCustomData.parameters["writeCustomDataVarId"]) || 73;
    	
    	const ENTITY_TYPE_EVENT_CODEWORD = 'event';
    	const ENTITY_TYPE_PIC_CODEWORD = 'pic';
    	const ENTITY_SEARCH_ID_CODEWORD = 'id';
    	const ENTITY_SEARCH_COORDS_CODEWORD = 'coords';
    	const ENTITY_UPDATE_REWRITE_CODEWORD = 'rew';
    	const ENTITY_UPDATE_DELETE_CODEWORD = 'del';
    	//----
    	
    	
    	//----LOGIC - MAIN
    	//--test
    	const test = () => {
    		console.log('eventsCustomDataVarId:', eventsCustomDataVarId);
    		console.log('picsCustomDataVarId:', picsCustomDataVarId);
    		let eventsCustomData = $gameVariables.value(eventsCustomDataVarId) || [];
    		let picsCustomData = $gameVariables.value(picsCustomDataVarId) || [];
    		console.log('TEST___picsCustomData:');
    		console.log(picsCustomData);
    		console.log('TEST___eventsCustomData:');
    		console.log(eventsCustomData);
    	}
    	
    	
    	//--create new
    	const createEntityCustomData = (createCriteria) => {
    			//console.log('createCriteria:');
    			//console.log(createCriteria);
    			
    		let gameEntity = getGameEntity(createCriteria);
    		
    		let entityCustomData = null;
    		
    		if(null === gameEntity || undefined === gameEntity){
    			console.log('DKR.EntityCustomData_ERROR: can not find game entity...search params are wrong!');
    			return;
    		}else{
    			if(ENTITY_TYPE_EVENT_CODEWORD === createCriteria.entityType){
    				let entitySelfId = gameEntity.eventId();
    				
    					//entityCustomData = { entityType: createCriteria.entityType, entityId: entitySelfId, entityCustomData: createCriteria.customData};
    				entityCustomData = Object.fromEntries(createCriteria.customData);
    				entityCustomData.entityId = entitySelfId;
    				entityCustomData.entityType = createCriteria.entityType;
    				
    				if( undefined === getEntityCustomData(createCriteria, false) ){
    					let eventsCustomData = $gameVariables.value(eventsCustomDataVarId) || [];
    					eventsCustomData.push(entityCustomData);
    					$gameVariables.setValue(eventsCustomDataVarId, eventsCustomData);
    					
    					console.log('DKR.EntityCustomData_INFO: entity created');
    				}else{
    					console.log('DKR.EntityCustomData_ERROR: equal custom data entity already exist!');
    				}
    				
    			}else if(ENTITY_TYPE_PIC_CODEWORD === createCriteria.entityType){
    				let entitySelfId = createCriteria.searchParams[0];
    				let entityType = createCriteria.entityType;
    				
    					//entityCustomData = { entityType: createCriteria.entityType, entityId: entitySelfId, entityCustomData: createCriteria.customData};
    				entityCustomData = Object.fromEntries(createCriteria.customData);
    				entityCustomData.entityId = entitySelfId;
    				entityCustomData.entityType = createCriteria.entityType;
    				
    				if( undefined === getEntityCustomData(createCriteria, false) ){
    					let picsCustomData = $gameVariables.value(picsCustomDataVarId) || [];
    					picsCustomData.push(entityCustomData);
    					$gameVariables.setValue(picsCustomDataVarId, picsCustomData);
    					
    					console.log('DKR.EntityCustomData_INFO: entity created');
    				}else{
    					console.log('DKR.EntityCustomData_ERROR: equal custom data entity already exist!');	
    				}
    				
    			}else{
    				console.log('DKR.EntityCustomData_ERROR: unknown entity  type "' + searchCriteria.entityType + '"...search params are wrong!');
    				return;
    			}
    		}
    
    	}
    	//--
    	
    	
    	//--update exist
    	const updateEntityCustomData = (updateCriteria) => {
    		let entityCustomData = getEntityCustomData(updateCriteria, false);
    		let entityIndex = -1;
    		
    		if(null === entityCustomData || undefined === entityCustomData){
    			console.log('DKR.EntityCustomData_ERROR: can not find entity...search params are wrong!');
    			return;
    		}else{
    			
    			if(ENTITY_TYPE_EVENT_CODEWORD === updateCriteria.entityType){
    				let eventsCustomData = $gameVariables.value(eventsCustomDataVarId) || [];
    				entityIndex = eventsCustomData.indexOf(entityCustomData);
    			}else if(ENTITY_TYPE_PIC_CODEWORD === updateCriteria.entityType){
    				let picsCustomData = $gameVariables.value(picsCustomDataVarId) || [];
    				entityIndex = picsCustomData.indexOf(entityCustomData);
    			}else{
    				console.log('DKR.EntityCustomData_ERROR: unknown entity  type "' + searchCriteria.entityType + '"...search params are wrong!');
    				return;
    			}
    			
    			if(-1 === entityIndex){
    				console.log('DKR.EntityCustomData_ERROR: can not find entity...search params are wrong!');
    				return;
    			}else{
    				
    				if(ENTITY_UPDATE_DELETE_CODEWORD === updateCriteria.updateType){
    					for(let n = 0; n < updateCriteria.customData.length; n++){
    						let keyName = updateCriteria.customData[n][0];
    						if(true === entityCustomData.hasOwnProperty(keyName)){
    							delete entityCustomData[keyName];
    						}
    					}
    				}else if(ENTITY_UPDATE_REWRITE_CODEWORD === updateCriteria.updateType){
    					for(let m = 0; m < updateCriteria.customData.length; m++){
    						let keyName = updateCriteria.customData[m][0];
    						let keyValue = updateCriteria.customData[m][1];
    						if(true === entityCustomData.hasOwnProperty(keyName)){
    							entityCustomData[keyName] = keyValue;
    						}
    					}
    				}
    
    				if(ENTITY_TYPE_EVENT_CODEWORD === updateCriteria.entityType){
    					let eventsCustomData = $gameVariables.value(eventsCustomDataVarId) || [];
    					eventsCustomData[entityIndex] = entityCustomData;
    					$gameVariables.setValue(eventsCustomDataVarId, eventsCustomData);
    				}else if(ENTITY_TYPE_PIC_CODEWORD === updateCriteria.entityType){
    					let picsCustomData = $gameVariables.value(picsCustomDataVarId) || [];
    					picsCustomData[entityIndex] = entityCustomData;
    					$gameVariables.setValue(picsCustomDataVarId, picsCustomData);
    				}
    				
    				console.log('DKR.EntityCustomData_INFO: entity updated');
    			}
    			
    		}
    		
    	}
    	//--
    	
    	//--delete exist entity (FULL DELETE)
    	const deleteEntityCustomData = (deleteCriteria) => {
    		let entityCustomData = getEntityCustomData(deleteCriteria, false);
    		let entityIndex = -1;
    		
    		if(null === entityCustomData || undefined === entityCustomData){
    			console.log('DKR.EntityCustomData_ERROR: can not find entity...search params are wrong!');
    			return;
    		}else{
    			let eventsCustomData = $gameVariables.value(eventsCustomDataVarId) || [];
    			let picsCustomData = $gameVariables.value(picsCustomDataVarId) || [];
    			
    			if(ENTITY_TYPE_EVENT_CODEWORD === deleteCriteria.entityType){
    				entityIndex = eventsCustomData.indexOf(entityCustomData);
    				
    				if(-1 === entityIndex){
    					console.log('DKR.EntityCustomData_ERROR: can not find entity...search params are wrong!');
    					return;
    				}
    				
    				delete eventsCustomData[entityIndex];
    				eventsCustomData = eventsCustomData.filter( elem => elem );
    				$gameVariables.setValue(eventsCustomDataVarId, eventsCustomData);
    			}else if(ENTITY_TYPE_PIC_CODEWORD === deleteCriteria.entityType){
    				entityIndex = picsCustomData.indexOf(entityCustomData);
    				
    				if(-1 === entityIndex){
    					console.log('DKR.EntityCustomData_ERROR: can not find entity...search params are wrong!');
    					return;
    				}
    				
    				delete picsCustomData[entityIndex];
    				picsCustomData = picsCustomData.filter( elem => elem );
    				$gameVariables.setValue(picsCustomDataVarId, picsCustomData);
    			}else{
    				console.log('DKR.EntityCustomData_ERROR: unknown entity  type "' + searchCriteria.entityType + '"...search params are wrong!');
    				return;
    			}
    			console.log('DKR.EntityCustomData_INFO: entity deleted');
    		}
    		
    	}
    	
    	//--search exist
    	const getEntityCustomData = (searchCriteria, writeDataInVar) => {
    			//console.log('searchCriteria:');
    			//console.log(searchCriteria);
    			
    		let dataList = [];
    		let entityCustomData = null;
    		
    		if(ENTITY_TYPE_EVENT_CODEWORD === searchCriteria.entityType){
    			let eventsCustomData = $gameVariables.value(eventsCustomDataVarId) || [];	
    			dataList = eventsCustomData;
    		}else if(ENTITY_TYPE_PIC_CODEWORD === searchCriteria.entityType){
    			let picsCustomData = $gameVariables.value(picsCustomDataVarId) || [];
    			dataList = picsCustomData;
    		}else{
    			console.log('DKR.EntityCustomData_ERROR: unknown entity  type "' + searchCriteria.entityType + '"...search params are wrong!');
    		}
    		
    		if(ENTITY_SEARCH_ID_CODEWORD === searchCriteria.searchType){
    			entityCustomData = getEntityCustomDataById(dataList, searchCriteria);
    		}else if(ENTITY_SEARCH_COORDS_CODEWORD === searchCriteria.searchType){
    			entityCustomData = getEntityCustomDataByCoords(dataList, searchCriteria);
    		}else{
    			console.log('DKR.EntityCustomData_ERROR: unknown search type "' + searchCriteria.searchType + '"...search params are wrong!');
    		}
    		
    			//console.log('entityCustomData:');
    			//console.log(entityCustomData);
    			
    		if(true === writeDataInVar){
    			$gameVariables.setValue(writeCustomDataVarId, entityCustomData);
    		}
    		
    		if(null === entityCustomData || undefined === entityCustomData){
    			console.log('DKR.EntityCustomData_INFO: no entities found');
    		}else{
    			console.log('DKR.EntityCustomData_INFO: some entities found correct');
    		}
    			
    		return entityCustomData;	
    	}
    	
    	const getEntityCustomDataById = (dataList, searchCriteria) => {
    		let searchResult = null;
    		let searchId = searchCriteria.searchParams[0];
    		searchResult = dataList.filter(entity => entity.entityId === searchId)[0];
    		
    		return searchResult;
    	}
    	
    	const getEntityCustomDataByCoords = (dataList, searchCriteria) => {
    		let searchResult = null;
    		let searchCoordX = searchCriteria.searchParams[0];
    		let searchCoordY = searchCriteria.searchParams[1];
    		
    		for(let n = 0; n < dataList.length; n++){
    			let entity = dataList[n];
    			let gameEntity = null;
    			
    			
    			if(ENTITY_TYPE_EVENT_CODEWORD === searchCriteria.entityType){
    				gameEntity = getGameEntity(searchCriteria); 		
    					//console.log('__CURRENT_GAME_EVENT_SEARCH_ENTITY:', gameEntity);
    			}else if(ENTITY_TYPE_PIC_CODEWORD === searchCriteria.entityType){
    				gameEntity = getGameEntity(searchCriteria);	
    					//console.log('__CURRENT_GAME_PIC_SEARCH_ENTITY:', gameEntity);
    			}else{
    				console.log('DKR.EntityCustomData_ERROR: unknown search type "' + searchCriteria.searchType + '"...search params are wrong!');
    			}
    			
    			if(null === gameEntity || undefined === gameEntity){
    				console.log('DKR.EntityCustomData_ERROR: can not find game entity...search params are wrong!');
    			}else{
    					//console.log('__gameEntity:', gameEntity);
    				if(gameEntity._x === searchCoordX && gameEntity._y === searchCoordY){
    					searchResult = entity;
    				}
    			}
    			
    		}
    		
    		return searchResult;
    	}
    	//--
    	
    	//----
    	
    	//----LOGIC - UTILS
    	const getGameEntity = (findCriteria) => {
    		let gameEntity = null;
    		
    		if(ENTITY_TYPE_EVENT_CODEWORD === findCriteria.entityType){
    			if(ENTITY_SEARCH_ID_CODEWORD === findCriteria.searchType){
    				gameEntity = getGameEventById(findCriteria.searchParams[0]);
    			}else if(ENTITY_SEARCH_COORDS_CODEWORD === findCriteria.searchType){
    				gameEntity = getGameEventByCoords(findCriteria.searchParams);
    			}else{
    				console.log('DKR.EntityCustomData_ERROR: unknown search type "' + findCriteria.searchType + '"...search params are wrong!');
    			}
    		}else if(ENTITY_TYPE_PIC_CODEWORD === findCriteria.entityType){
    			if(ENTITY_SEARCH_ID_CODEWORD === findCriteria.searchType){
    				gameEntity = getGamePictureById(findCriteria.searchParams[0]);
    			}else if(ENTITY_SEARCH_COORDS_CODEWORD === findCriteria.searchType){
    				gameEntity = getGamePictureByCoords(findCriteria.searchParams);
    			}else{
    				console.log('DKR.EntityCustomData_ERROR: unknown search type "' + findCriteria.searchType + '"...search params are wrong!');
    			}
    		}else{
    			console.log('DKR.EntityCustomData_ERROR: unknown entity "' + findCriteria.entityType + '" type...search params are wrong!');
    		}
    		
    		return gameEntity;
    	}
    	
    	const getGameEventById = (gameEventId) => {
    		let gameEvent = null;
    		
    		gameEvent = $gameMap.event(gameEventId);
    		
    		return gameEvent;
    	}
    	
    	const getGameEventByCoords = (gameEventCoordsList) => {
    		let gameEvent = null;
    		let xCoord = gameEventCoordsList[0];
    		let yCoord = gameEventCoordsList[1];
    		
    		gameEvent = $gameMap.eventsXy(xCoord, yCoord)[0];
    		
    		return gameEvent;
    	}
    	
    	const getGamePictureById = (gamePictureId) => {
    		let gamePicture = null;
    		gamePicture = $gameScreen._pictures[gamePictureId];
    		
    		return gamePicture;
    	}
    	
    	const getGamePictureByCoords = (gamePictureCoordsList) => {
    		let gamePicture = null;
    		let xCoord = gamePictureCoordsList[0];
    		let yCoord = gamePictureCoordsList[1];
    		
    		gamePicture = $gameScreen._pictures.filter(picture => picture._x === xCoord && picture._y === yCoord)[0];
    		
    		return gamePicture;
    	}
    	//----
    	
    	
    	//----COMMANDS
    	DKR.EntityCustomData.test = function(){
    		test();
    	}
    	
    	DKR.EntityCustomData.createCustomData = function(createCriteria){
    		createEntityCustomData(createCriteria);
    	}
    	
    	DKR.EntityCustomData.getCustomData = function(searchCriteria, writeDataInVar = false){
    		return getEntityCustomData(searchCriteria, writeDataInVar);
    	}
    	
    	DKR.EntityCustomData.updateCustomData = function(updateCriteria){
    		updateEntityCustomData(updateCriteria);
    	}
    	
    	DKR.EntityCustomData.deleteCustomData = function(deleteCriteria){
    		deleteEntityCustomData(deleteCriteria);
    	}
    	//----
    	
    	
    } )();


    Загрузка:
    Спойлер Версия 1.0 для MV и MZ:


    Условия поставки плагина:
    Поставляется AS-IS.
    Вся ответственность при использовании - на Пользователе!
    !

    Совместимость:
    Плагин не меняет логику работы мейкера и весь функционал содержит сам в себе.
    Но...совместимость с другими плагинами не гарантируется.

    Спойлер Лирическое отступление (многабуков):

    Я действительно хотел отдохнуть от мейкера, но...от попыток ковыряния некоторых других движков стало грустно за мукер.
    У Кадокавы (или кто там сейчас) были все возможности занять нишу "универсального-простого-движка-на-JS", но полимеров уже нет и ниша, имхо, занята.
    Со своим прямым назначением мейкер, конечно, справляется. Но тем не менее.

    И я подумал, чего лично мне больше всего не хватает в мейкере как движке (даже с учетом тысяч плагинов).
    Мне лично не хватало возможности прицепить к эвенту / картинке состояние и легко им управлять. Это одна из причин кривизны моей АБС из "Культа" и механик некоторых других игр.
    Да, есть "страницы эвента" и локальные свитчи. Есть переменные (в.т.ч. "локальные" у некоторых плагинов).
    Есть метадата эвента, есть комментарии...Но не то.
    Вот теперь я сделал и спокоен. =)

    На Светлой Арлекин вскользь высказал правильную мысль, что мейкер нужно использовать по назначению. Он прав, в целом то.
    Но если рассматривать мейкер не как конструктор для РПГ, а как движок на JS и Node...
    Короче, "make maker great again"(c)

    Естественно, никакие механики не компенсируют прямые руки и огромное количество крутых проектов было сделано на стандартном (или почти стандартном) функционале.
    НО с дополнительными возможностями можно развернуться серьезнее.
    И есть еще одна вещь, которой мне не хватает для работы с картинками (хотя ее можно и эмулировать "костылями")...
    Надеюсь, когда-нибудь получится реализовать.
    Последний раз редактировалось Darchan Kaen; 15.01.2022 в 22:52. Причина: Очепятки

  2. #2
    Бывалый Аватар для Darchan Kaen
    Информация о пользователе
    Регистрация
    17.06.2013
    Адрес
    Одесса
    Сообщений
    851
    Записей в дневнике
    3
    Репутация: 47 Добавить или отнять репутацию

    По умолчанию

    Бонус - примеры использования, то есть критериев(скрины).
    Реальный пример использования относительно сложен, может когда-нибудь будет демка.

    Спойлер Скрины:

    Создание объекта данных


    Обновление объекта данных


    Поиск(получение) объекта данных


    Удаление объекта данных



    Может быть вопрос:
    почему при создании объекта данных нужно писать критерии поиска?
    Это нужно, так как:
    При создании объекта данных он "привязывается" к игровому объекту (Эвенту или Картинке) и для привязки нужно знать, к чему же связать.
    Найти Эвент / Картинку можно по номеру или координатам на экране (для Эвента - координаты тайла, для Картинки - экрана).
    В результате, дальнейшая связь по id найденного игрового объекта.
    Последний раз редактировалось Darchan Kaen; 15.01.2022 в 20:36.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
[MZ ~ MV] DKR_EntityCustomData